package com.hamll.es;


import com.alibaba.fastjson.JSON;
import com.hamll.es.pojo.ItemDoc;
import com.hmall.common.client.ItemFeignClient;
import com.hmall.common.dto.ItemDto;
import com.hmall.common.dto.PageResult;
import org.checkerframework.checker.units.qual.A;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;
import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
public class EsPort {


    /**
     * 批量导入数据到es中的操作
     */
    @Autowired
    private ItemFeignClient itemFeignClient;

    @Autowired
    private RestHighLevelClient client;

    //批量导入到es中
    @Test
    public void insertItemPorts() throws IOException {
        Integer page = 1;
        //1.获取mysql中的商品 数据，8万多条
        while (true) {//因为数据太大用死循环来解决
            //1.1将数据导入到es中1先获取，mysql中的信息
            PageResult<ItemDto> pageResult = itemFeignClient.list(page, 50);//拿到数据平且以50的数据传输
            //获取商品的信息并且判断传输的数据
            List<ItemDto> itemDtoList = pageResult.getList();
            if (itemDtoList.size() <= 0) {
                break;
            }
            //2.分页导入到ES
            //4.创建批量的请求对象
            BulkRequest bulkRequest = new BulkRequest();
            //4.1遍历拿到的MySQL数据
            for (ItemDto itemDto : itemDtoList) {

                if (itemDto.getStatus() == 2) {//判断如果商品的状态时下架就就停止传输
                    continue;
                }
                //类型转换
                ItemDoc itemDoc = new ItemDoc(itemDto);//将已将拿到的数据转换为前端发回来的字符串
                String source = JSON.toJSONString(itemDoc);//
                //6创建索引请求对象,并指定索引名称，
                IndexRequest indexRequest = new IndexRequest("hmall").id(itemDoc.getId().toString());//将得到的JSON转到String
                //7往索引对象中添加数据，数据类型指定的是json
                indexRequest.source(source, XContentType.JSON);
                //5往批量请求对象中添加参数
                bulkRequest.add(indexRequest);
            }
            //3调用批量导入方法
            client.bulk(bulkRequest, RequestOptions.DEFAULT);
            page++;
        }


    }
}
